package com.example.taphelper.utils

import kotlin.random.Random

/**
 * 点击配置数据类
 */
data class TapConfig(
    var x: Int = 0,          // 点击X坐标（矩形模式下为左上角）
    var y: Int = 0,          // 点击Y坐标（矩形模式下为左上角）
    var intervalMillis: Long = 1000,  // 点击间隔(毫秒)
    var delayMillis: Long = 0,     // 延迟开始时间(毫秒)
    var isEnabled: Boolean = false,  // 是否启用
    
    // 新增：矩形区域点击模式
    var useRectangleMode: Boolean = false,    // 是否启用矩形区域模式
    var rectLeft: Int = 0,           // 矩形左边界
    var rectTop: Int = 0,            // 矩形上边界  
    var rectRight: Int = 0,          // 矩形右边界
    var rectBottom: Int = 0,         // 矩形下边界
    
    // 传统随机化参数（矩形模式下这些参数不使用）
    var randomOffsetRange: Float = 5.0f,      // 位置随机偏移范围（像素，支持小数）
    var intervalRandomRange: Float = 200.0f,  // 时间间隔随机范围（毫秒，支持小数）
    var enableRandomPause: Boolean = true,    // 是否启用随机停顿
    var randomPauseChance: Double = 0.1,      // 随机停顿概率（10%）
    var randomPauseMinMs: Long = 1000,        // 随机停顿最小时间
    var randomPauseMaxMs: Long = 3000         // 随机停顿最大时间
) {
    
    /**
     * 获取间隔秒数
     */
    fun getIntervalSeconds(): Float = intervalMillis / 1000f
    
    /**
     * 设置间隔秒数
     */
    fun setIntervalSeconds(seconds: Float) {
        intervalMillis = (seconds * 1000).toLong()
    }
    
    /**
     * 获取延迟开始秒数
     */
    fun getDelaySeconds(): Float = delayMillis / 1000f
    
    /**
     * 设置延迟开始秒数
     */
    fun setDelaySeconds(seconds: Float) {
        delayMillis = (seconds * 1000).toLong()
    }
    
    /**
     * 获取随机化后的点击位置
     * 根据模式选择：矩形区域内随机位置 或 原始位置周围随机偏移
     */
    fun getRandomizedPosition(): Pair<Int, Int> {
        return if (useRectangleMode) {
            // 矩形模式：在矩形区域内随机选择位置
            val width = rectRight - rectLeft
            val height = rectBottom - rectTop
            
            if (width <= 0 || height <= 0) {
                // 如果矩形无效，回退到中心点
                Pair((rectLeft + rectRight) / 2, (rectTop + rectBottom) / 2)
            } else {
                val randomX = rectLeft + Random.nextInt(width + 1)
                val randomY = rectTop + Random.nextInt(height + 1)
                Pair(randomX, randomY)
            }
        } else {
            // 传统模式：在原始位置周围随机偏移
            val randomXOffset = (Random.nextFloat() - 0.5f) * 2 * randomOffsetRange
            val randomYOffset = (Random.nextFloat() - 0.5f) * 2 * randomOffsetRange
            val randomX = (x + randomXOffset).toInt()
            val randomY = (y + randomYOffset).toInt()
            
            // 确保坐标不为负数
            Pair(maxOf(0, randomX), maxOf(0, randomY))
        }
    }
    
    /**
     * 获取随机化后的时间间隔
     */
    fun getRandomizedInterval(): Long {
        val randomOffset = (Random.nextFloat() - 0.5f) * 2 * intervalRandomRange
        val newInterval = intervalMillis + randomOffset
        return newInterval.toLong().coerceAtLeast(100) // 最小100毫秒
    }
    
    /**
     * 是否应该进行随机停顿
     */
    fun shouldRandomPause(): Boolean {
        return enableRandomPause && Random.nextDouble() < randomPauseChance
    }
    
    /**
     * 获取随机停顿时间
     */
    fun getRandomPauseTime(): Long {
        return Random.nextLong(randomPauseMinMs, randomPauseMaxMs + 1)
    }
    
    /**
     * 复制配置
     */
    fun copy(): TapConfig {
        return TapConfig(
            x, y, intervalMillis, delayMillis, isEnabled,
            useRectangleMode, rectLeft, rectTop, rectRight, rectBottom,
            randomOffsetRange, intervalRandomRange, enableRandomPause,
            randomPauseChance, randomPauseMinMs, randomPauseMaxMs
        )
    }
    
    /**
     * 验证配置有效性
     */
    fun isValid(): Boolean {
        return if (useRectangleMode) {
            rectLeft >= 0 && rectTop >= 0 && rectRight > rectLeft && rectBottom > rectTop && 
            intervalMillis > 0 && delayMillis >= 0
        } else {
            x > 0 && y > 0 && intervalMillis > 0 && delayMillis >= 0
        }
    }
    
    override fun toString(): String {
        return if (useRectangleMode) {
            "TapConfig(矩形模式: ($rectLeft,$rectTop)-($rectRight,$rectBottom), " +
                    "interval=${intervalMillis}ms±${intervalRandomRange}ms, delay=${delayMillis}ms, enabled=$isEnabled)"
        } else {
            "TapConfig(单点模式: x=$x, y=$y, interval=${intervalMillis}ms±${intervalRandomRange}ms, " +
                    "delay=${delayMillis}ms, offset=±${randomOffsetRange}px, enabled=$isEnabled)"
        }
    }
} 